﻿
/**
 * @des 检测数字字符串是否为两位，不足两位补齐
 * @param str 要检测的字符串
 */
function getFull(str) {
	if (parseInt(str) == str) {
		if (str < 10) {
			return "0" + str;
		} else {
			return str;
		}
	}
}


/**
 * @des 获取当前的时间串,格式为十四位数字
 * @param str 要转换的时间串
 */
function getNow() {
	var _date = new Date();
	var strTodayTime = "";
	var strY = _date.getFullYear();
	var strM = getFull(_date.getMonth() + 1);
	var strD = getFull(_date.getDate());
	var strH = getFull(_date.getHours());
	var strS = getFull(_date.getMinutes());
	var strMi = getFull(_date.getSeconds());
	
	strTodayTime = strY + strM + strD + strH + strS + strMi;
	
	return strTodayTime;
}


/**
 * @des 将十四位数字的时间串转换成日期格式
 * @param str 要转换的时间串
 */
function getTime(str) {
	var tmp:String = "";
	
	if (str.length < 12) {
		return false;
	} else {
		tmp = str.substr(0, 4) + "-" + str.substr(4, 2) + "-" + str.substr(6, 2) + " " + str.substr(8, 2) + ":" + str.substr(10, 2);
	}
	return tmp;
}

/**
 * @des 获取成员列表中成员名称
 * @param str 成员列表
 */
function getMemberName(str) {
	var tmpArray:Array;
	var tmpString:String = "";
	
	if (str.length > 0) {
		tmpArray = str.split(",");
		
		for (var i:Number = 0; i < tmpArray.length; i++) {
			if (tmpArray[i] != "") {
				tmpString += tmpArray[i].split(":")[0] + ",";
			}
		}
	}
	return tmpString;
}


/**
 * @des 成员名称与成员ID互查
 * @param str 成员名称或成员ID
 * @param getType 要获取的类型，接受两个字符串，"id" 与 "name"
 */
function getIdOrName(str, getType) {
	/**
	 * @des cIndex 比较的索引，如果是要获取成员名称，那么cIndex为1，相反则为0.
	 *      gIndex 要获取的索引，cIndex与gIndex的值一定是互斥的。
	 *      即，如果cIndex为0，那么gIndex一定为1，反之亦然。
	 */
	var cIndex:Number, gIndex:Number;
	
	switch (getType.toLowerCase()) {
		case "id":
			cIndex = 0;
			gIndex = 1;
			break;
		case "name":
			cIndex = 1;
			gIndex = 0;
			break;
		default:
			return null;
			break;
	}
	
	var tmpArray:Array = new Array();
	
	tmpArray = currentInfo.data.idAndName.split(",");
	
	for (var i:Number = 0; i < tmpArray.length; i++) {
		if (tmpArray[i] != "") {
			if (tmpArray[i].split(":")[cIndex] == str) {
				return tmpArray[i].split(":")[gIndex];
			}
		}
	}
	return null;
}


/**
 * @des 弹出系统提示框
 * @param t 标题
 * @param c 内容
 * @param flag 按钮个数 1/2
 */
function alert(t, c, flag) {
	with (mx.controls.Alert) {
		okLabel = "确定";
		cancelLabel = "取消";
		switch (parseInt(flag)) {
			case 1:
				show(c, t, OK, _root, null, "alertIcon");
				break;
			case 2:
				show(c, t, OK|CANCEL, _root, null, "alertIcon");
				break;
		}
	}
}


/**
 * @des 关闭连接信息
 */
function hideLoadInfo() {
	loadInfo._visible = false;
}


/**
 * @des 调整聊天区域的显示位置，使滚动条始终滚动到底部
 */
function updateVPosition() {
	call_board.vPosition = call_board.maxVPosition;
}


/**
 * @des 创建全屏视频窗口按钮
 */
function buildFs() {
	removeMovieClip(rs);
	trace("开始创建全屏视频窗口按钮．．．");
	attachMovie("fs", "fs", _root.getNextHighestDepth(), { _x: 778, _y: 100, _alpha: 80 });
	fs.onPress = function() {
		_global.v._x = 0;
		_global.v._y = 0;
		_global.v._width = 1001;
		_global.v._height = 700;
		_global.v.swapDepths(_root.getNextHighestDepth());
		
		buildRs();
	};
}

/**
 * @des 创建恢复视频窗口按钮
 */
function buildRs() {
	removeMovieClip(fs);
	attachMovie("resume", "rs", _root.getNextHighestDepth(), { _x: 978, _y: 0, _alpha: 80 });
	rs.onPress = function() {
		_global.v._x = 200;
		_global.v._y = 100;
		_global.v._width = 600;
		_global.v._height = 410;
		_global.v.swapDepths(_root.getNextHighestDepth());
		
		buildFs();
	};
};


/**
 * @des 初始化[会议模式]
 * @param cb 下拉列表框控件对象
 */
function initMeetingMode(cb) {
	cb.addItem({ label: "大会模式", data: "大会模式" });
	cb.addItem({ label: "讨论会模式", data: "讨论会模式" });
}


/**
 * @des 初始化列表，所属于创建会议与会议管理
 * @param l List对象
 */
function initMemberList(l) {
	var tmpArray1:Array, tmpArray2:Array;
	var memberState:String = "offline";
	var so:SharedObject = SharedObject.getRemote("memberList", nc.uri);
	so.connect(nc);
	
	// 同步服务器端的memberList共享变量
	so.onSync = function() {
		tmpArray1 = memberIdList.split(",");
		tmpArray2 = memberNameList.split(",");
		
		if (tmpArray1.length != tmpArray2.length) {
			nc.call("upLog", null, memberId + "创建人员列表失败,数据格式不正确!");
		} else {
			// 清除列表中原有的数据
			l.removeAll();
			
			// 设置作为图标的字段
			l.iconField = "icon";
			l.rowHeight = 25;
			
			// 填充新数据
			for (var i:Number = 0; i < tmpArray1.length; i++) {
				if (tmpArray[i] != "") {
					// 判断是否在线
					for (var j in so.data) {
						if (so.data[j].memberId == tmpArray1[i]) {
							memberState = "online";
							break;
						} else {
							memberState = "offline";
						}
					}
					l.addItem({
							  label: tmpArray2[i],
							  data: tmpArray1[i],
							  icon: memberState
							  });
				}
			}
		}
	};
}


/**
 * @des 初始化当前会议列表，会议管理中使用
 */
function initCurrentMeetingMemberList() {
	var tmpArray1:Array, tmpArray2:Array;
	var memberState:String = "offline";
	var so:SharedObject = SharedObject.getRemote("meetingList", nc.uri, true);
	so.connect(nc);
	
	/**
	 * @des 同步服务器端的meetingList共享变量,获取当前会议的成员列表
	 *      因为本地存储的会议人员列表不包含成员Id
	 */
	so.onSync = function() {
		// 获取当前会议中的成员列表
		for (var i in so.data) {
			if (currentInfo.data.meetingId == so.data[i].id) {
				buildCurrentMeetingMemberList(so.data[i].memberList);
			}
		}
	};
}


/**
 * @des 生成当前会议成员列表，会议管理中使用
 * @param memberList 要显示的成员列表
 */
function buildCurrentMeetingMemberList(memberList) {
	var tmpArray1:Array, tmpArray2:Array;
	var memberState:String = "offline";
	var so:SharedObject = SharedObject.getRemote("memberList", nc.uri)
	so.connect(nc);
	

	so.onSync = function() {
		tmpArray1 = memberList.split(",");
		
		// 清除列表数据
		listCurrentMemberList.removeAll();
		
		// 设置图标字段
		listCurrentMemberList.iconField = "icon";
		listCurrentMemberList.rowHeight = 25;
		
		// 遍历成员列表
		for (var i:Number = 0; i < tmpArray1.length; i++) {
			if (tmpArray1[i] != "") {
				/**
				 * @des 拆分出成员Id与成员名称,服务器端返回的成员列表中包括成员Id与成员名称
				 *      格式：成员名称1:成员ID1,成员名称2:成员ID2,...,成员名称n:成员IDn,
				 */
				tmpArray2 = tmpArray1[i].split(":");

				// 判断是否在线
				for (var j in so.data) {
					// 测试用
					if (tmpArray2[1] == so.data[j].memberId) {
						memberState = "online";
						break;
					} else {
						memberState = "offline";
					}
				}
				
				// 添加到List 中
				listCurrentMemberList.addItem({
											  label: tmpArray2[0],
											  data: tmpArray2[1],
											  icon: memberState
											  });
			}
		}
	};
}

// 初始化聊天控制，所属于会议管理
function initChatCtrl() {
	chkboxChat.selected = currentInfo.data.allowPrivateChat;
	chkboxShowAll.selected = currentInfo.data.showAll;
}


/**
 * @des 初始化聊天时所使用的成员列表
 *      由于会议列表中没有存储成员Id，因此在这里所使用的是成员名称，在进行更新到服务器端时要注意
 */
function initMemberListOfChat() {
	var tmpArr1:Array, tmpArr2:Array;
	var so:SharedObject = SharedObject.getRemote('meetingList', nc.uri, true);
	so.connect(nc);
	
	so.onSync = function() {
		cbMemberListOfChat.removeAll();
	
		cbMemberListOfChat.addItem("所有与会人员", "");
	
		// 初始化其他的人员列表
		if (currentInfo.data.allowPrivateChat || memberName == currentInfo.data.createUser) {
			var tmpMemberId:String;
			var tmpMemberName:String;
			var memberArray:Array = [];
			var tmpString:String;
			
			// 获取当前会议的人员列表
			for (var i in so.data) {
				if (so.data[i].id == currentInfo.data.meetingId) {
					tmpString = so.data[i].memberList.split(',');
					
					for (var j = 0; j < tmpString.length; j++) {
						if (tmpString[j] != '') {
							memberArray.push(tmpString[j].split(':')[0]);
						}
					}
				}
				break;
			}
		
			for (var i:Number = 0; i < memberArray.length; i++) {
				if (memberArray[i] != "") {
					// 判断是否为当前成员，不把自己加入列表中
					if (memberArray[i] != memberName) {
						cbMemberListOfChat.addItem(memberArray[i], memberArray[i]);
					}
				}
			}
		}
	}
}


/**
 * @des 清空所有的视频列表，并释放数组
 */
function clearVideoList() {
	for (var i:Number = memberListArray.length - 1; i >= 0; i--) {
		removeMovieClip(memberListArray[i].winBase);
		removeMovieClip(memberListArray[i].winObject);
		removeMovieClip(memberListArray[i].winTitle);
		removeMovieClip(memberListArray[i].winBar);
		removeMovieClip(memberListArray[i].ctrlV);
		removeMovieClip(memberListArray[i].ctrlA);
		removeMovieClip(memberListArray[i].mc);
		memberListArray[i].winBase = null;
		memberListArray[i].winObject = null;
		memberListArray[i].winTitle = null;
		memberListArray[i].winBar = null;
		memberListArray[i].ctrlV = null;
		memberListArray[i].ctrlA = null;
		memberListArray[i].mc = null;
		memberListArray[i] = null;
	}
}

/**
 * @des 清除MC
 */
function clearMc() {
	for (var i:Number = 0; i < mcArray.length; i++) {
		removeMovieClip(mcArray[i]);
		mcArray[i] = null;
	}
}


/**
 * @des 判断字符串是否包含在指定数组中
 * @param str 要判断的字符串
 * @param arr 源数组
 */
function hasChild(str, arr) {
	for (var i:Number = 0; i < arr.length; i++) {
		if (str == arr[i]) {
			return true;
		}
	}
	return false;
}


/**
 * @des 新建会议，并验证客户端数据的有效性
 */
function chkMeeting() {
	// 选中的与会人员数组
	var selectedItemsArray:Array = memberList.selectedItems;
	
	/**
	 * @des 选中的与会人员字符串
	 *  拆分格式为:成员名称1:成员ID1,成员名称2:成员ID2,...,成员名称n:成员IDn,
	 */
	var selectedItemsString:String = "";
	
	for (var i:Number = 0; i < selectedItemsArray.length; i++) {
		selectedItemsString += selectedItemsArray[i].label + ":" + selectedItemsArray[i].data + ",";
	}
	
	// 获取会议模式,会议名称,会议主题
	var meetingModeString:String = ""
	var meetingNameString:String = ""
	var meetingThemeString:String = "";
	var cd:Date = new Date();
	var cdstr:String = cd.getFullYear().toString() +
						getFull(cd.getMonth() + 1).toString() +
						getFull(cd.getDate()).toString() +
						getFull(cd.getHours()).toString() +
						getFull(cd.getMinutes()).toString();
	
	if (meetingMode.length < 1) {
		alert("系统提示：","未获取到会议模式,请重新加载...", 1);
		return false;
	} else {
		meetingModeString = meetingMode.value;
	}
	if (meetingName.text == "") {
		alert("系统提示：", "会议名称不能为空!", 1);
		return false;
	} else {
		meetingNameString = meetingName.text;
	}
	meetingThemeString = meetingTheme.text;
	
	nc.call("newMeeting",
			null,
			meetingModeString,
			meetingNameString,
			meetingThemeString,
			selectedItemsString,
			memberName + ":" + memberId,
			cdstr,
			radioGroup.selection.data,
			txtMark.text);
	
	// 注销btnAppend按钮的click事件
	btnAppend.removeEventListener("click", chkMeeting)
}


/**
 * @des 判断当前成员是否具有会议的参与权
 * @param memberName 成员名称，不是成员Id
 * @param memberList 会议中所具有的成员列表，包含成员名称与成员Id
 *        拆分格式为:成员名称1:成员ID1,成员名称2:成员ID2,...,成员名称n:成员IDn,
 */
function chkMember(memberName, memberList) {
	var tmpArray:Array;
	
	if (memberList == "") {
		return false;
	} else {
		if (memberList.indexOf(",") > -1) {
			tmpArray = memberList.split(",");
			for (var i:Number = 0; i < tmpArray.length; i++) {
				if (tmpArray[i] != "") {
					if (memberName == tmpArray[i].split(":")[0]) {
						return true;
					}
				}
			}
		}
	}
	return false;
}


/**
 * @des 导入外部数据
 */
function importOutData() {
	/**
	 * @des 获取外部数据，如成员列表，由于成员列表中数据很多，用GET方式来直接获取会丢失数据
	 */
	loadInfo.text += "\r尝试导入外部数据...";
	
	var userList:String = String(ExternalInterface.call("getUserList"));
	
	//导入的数据为成员ID列表与成员名称列表，用$拆分
	if (userList.indexOf("$") == -1) {
		loadInfo.text += "\r导入外部数据失败...";
	} else {
		_global.memberIdList = userList.split("$")[0];
		_global.memberNameList = userList.split("$")[1];
		
		loadInfo.text += "\r导入外部数据成功...";
		setTimeout(hideLoadInfo, 3000);
	}
	
	/**
	 * 由于在HTTPS方式下loadVars不能正常工作，因此改用ExternalInterface.call来获取
	var lv:LoadVars = new LoadVars();
	lv.sendAndLoad("https://6.1.1.1:60003/OA/video/userList.php", lv, "POST");
	
	lv.onData = function(src:String) {
		//导入的数据为成员ID列表与成员名称列表，用$拆分
		if (src.indexOf("$") == -1) {
			loadInfo.text += "\r导入外部数据失败...";
		} else {
			_global.memberIdList = src.split("$")[0];
			_global.memberNameList = src.split("$")[1];
			loadInfo.text += "\r---------------\r" + src;
			loadInfo.text += "\r导入外部数据成功...";
			setTimeout(hideLoadInfo, 3000);
		}
	};
	*/
}


/**
 * @des 初始化测试数据，发布时不需要调用
 */
function initTestData() {
	_global.memberId = "省中心_administrator";						// 成员Id
	_global.memberName = "省中心_administrator";					// 成员名称
	_global.memberIdList = "省中心_administrator,省中心_test,省中心_Kampiner,厦门中心_administrator," +
						   "厦门中心_xm,省中心_administrator2,省中心_test2,省中心_Kampiner2," + 
						   "省中心_t1,省中心_t2,省中心_t3,省中心_t4,省中心_t5,省中心_t6," +
						   "省中心_t7,省中心_t8,省中心_t9,省中心_t10,省中心_t11,省中心_t12," +
						   "省中心_t13,省中心_t14,省中心_t15,省中心_t16,省中心_t17,省中心_t18," +
						   "省中心_t19,省中心_t20,省中心_t21,省中心_t22,省中心_t23,省中心_t24";			// 成员Id列表
	_global.memberNameList = "省中心_administrator,省中心_测试者,省中心_Kampiner,厦门中心_Admin," +
							 "厦门中心_Xm,省中心_administrator2,省中心_test2,省中心_Kampiner2," +
							 "省中心_测试1,省中心_测试2,省中心_测试3,省中心_测试4,省中心_测试5,省中心_测试6," +
							 "省中心_测试7,省中心_测试8,省中心_测试9,省中心_测试10,省中心_测试11,省中心_测试12," +
							 "省中心_测试13,省中心_测试14,省中心_测试15,省中心_测试16,省中心_测试17,省中心_测试18," +
							 "省中心_测试19,省中心_测试20,省中心_测试21,省中心_测试22,省中心_测试23,省中心_测试24";				// 成员名称列表

	_global.serverIp = "192.168.0.143";						// FMS服务器地址
	_global.isMain = true;
	
	_global.currentMode = "讨论会模式";
	
	
	/**
	 * @des 创建提示
	 */
	this.createTextField("loadInfo",
						 this.getNextHighestDepth(),
						 850,
						 0,
						 150,
						 22);
	loadInfo.wordWrap = false;
	loadInfo.autoSize = true;
	loadInfo.textColor = 0xFFFFFF;
	loadInfo.background = true;
	loadInfo.backgroundColor = 0xCC4444;
	loadInfo.text = "正在初始化...                             ";
}


/**
 * @des 初始化系统状态
 */
function initStat() {
	_global.memberId = outMemberId;
	_global.memberName = outMemberName;
	_global.serverIp = outIp;
	_global.src = outSrc;
	
	/**
	 * @des 创建提示
	 */
	this.createTextField("loadInfo",
						 this.getNextHighestDepth(),
						 850,
						 0,
						 150,
						 22);
	loadInfo.wordWrap = false;
	loadInfo.autoSize = true;
	loadInfo.textColor = 0xFFFFFF;
	loadInfo.background = true;
	loadInfo.backgroundColor = 0xCC4444;
	loadInfo.text = "正在初始化...                             ";
}


/**
 * @des 判断当前是否有人正在发言
 * @return 如果有返回此对象在memberListArray数组中的索引，如果没有则返回-1
 */
function hasProlocutor() {
	for (var i:Number = 0; i < memberListArray.length; i++) {
		if (memberListArray[i].isProlocutor) {
			return i;
		}
	}
	return -1;
}


/**
 * @des 清除当前发言人
 * @param 要清除的发言人在memberListArray数组中的索引
 *        如果为-1，则没有当前发言人，因此不进行清除操作
 */
function clearCurrentProlocutor(index) {
	if (index == -1) {
		return ;
	} else {
		// 重置标志位isProlocutor=false，取消此成员的发言权
		memberListArray[index].isProlocutor = false;
		
		/**
		 * @des 判断是否在列表中，如果在，则还原窗口的大小与位置
		 *      如果不在列表中，则移除此视频窗口, 不关闭管理员的声音
		 */
		if (memberListArray[index].flag) {
			memberListArray[index].winObject._x = memberListArray[index].winObject.x;
			memberListArray[index].winObject._y = memberListArray[index].winObject.y;
			memberListArray[index].winObject._width = 160;
			memberListArray[index].winObject._height = 120;
			memberListArray[index].winObject.swapDepths(memberListArray[index].winObject.depth);
			memberListArray[index].winBase.winTxt.htmlText = "<font color='#CCCCCC'>视频窗口</font>";
			//_global.tmpSound.stop();
			//_global.tmpSound.sound.setVolume(0);
			//_global.tmpSound = null;
			//removeMovieClip(tmpAudio);
			//tmpAudio = null;
			//memberListArray[index].sound.stop();
			if (memberListArray[index].memberName != currentInfo.data.createUser) {
				memberListArray[index].sound.setVolume(0);
			}
		} else {
			// 关闭视频流
			memberListArray[index].winObject.ns.close();
			removeMovieClip(memberListArray[index].winObject);
		}
		// 清除发言席控制按钮
		removeMovieClip(rs);
		removeMovieClip(fs);
	}
}


/**
 * @des 设置新的发言人
 * @param proposer 要切换至的新发言人ID
 */
function setCurrentProlocutor(proposerId) {
	var index;
	
	// 判断当前成员是否显示在列表中
	for (var i:Number = 0; i < memberListArray.length; i++) {
		memberListArray[i].isProlocutor = false;
		if (memberListArray[i].memberId == proposerId) {
			index = i;
		}
	}
	
	// 判断是否显示在列表中
	if (memberListArray[index].flag) {
		// 设置成当前发言人
		memberListArray[index].isProlocutor = true;
		_global.currentWin = memberListArray[index];
		
		memberListArray[index].winObject._x = 200;
		memberListArray[index].winObject._y = 100;
		memberListArray[index].winObject._width = 600;
		memberListArray[index].winObject._height = 410;
		memberListArray[index].winObject.swapDepths(this.getNextHighestDepth());
		if (memberListArray[index].memberName != currentInfo.data.createUser) {
			memberListArray[index].sound.setVolume(100);
		}
		
		_global.tmpSound = memberListArray[index].winObject;
		/**
		 * 創建一個臨時的影片，用來控制聲音,这块先去掉,没发现有啥影响.当初加这块的原因是用来控制声音.
		 *  现在用不到了.直接设置列表中对象的声音就可以.
		 */
		/*
		this.createEmptyMovieClip("tmpAudio", this.getNextHighestDepth());
		tmpAudio.attachAudio(memberListArray[index].ns);
		_global.tmpSound = new Sound(tmpAudio);
		if (memberName == memberListArray[index].memberName) {
			_global.tmpSound.stop();
			_global.tmpSound.setVolume(0);
		} else {
			_global.tmpSound.start();
		}
		*/
		// 創建音頻控制
		
		_global.v = memberListArray[index].winObject;
		v.swapDepths(this.getNextHighestDepth());
		
		buildFs();
		memberListArray[index].winBase.winTxt.htmlText = "<font color='#FF0000'>正在发言</font>";
	} else {
		/**
		 * @des 如果没有显示在当前列表中，那么就要新建一个视频窗口，并且要初始化视频窗口的属性．
		 *      然后遍历memberListArray数组，找到当前发言人，将当前视频窗口对象赋给winObject．
		 */
		if (!memberListArray[index].flag) {
			memberListArray[index].isProlocutor = true;
			memberListArray[index].winBase.winTxt.htmlText = "<font color='#FF0000'>正在发言</font>";
			
			// 创建视频窗口
			memberListArray[index].winObject = this.attachMovie("videoWin",
													   "videoWin_" + winIndex,
													   this.getNextHighestDepth(),
													   {
															_x: 200,
															_y: 100,
															_width: 600,
															_height: 410
													   });
			
			// 添加属性
			memberListArray[index].winObject.index = i;
			
			// 加载视频流
			memberListArray[index].winObject.videoWin.attachVideo(memberListArray[index].ns);
			
			_global.v = memberListArray[index].winObject;
			v.swapDepths(this.getNextHighestDepth());
			buildFs();
			
			// 播放视频流
			memberListArray[index].ns.play(memberListArray[index].memberId);
			
			winIndex++;
		}
	}
}
